package config

import (
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"io"
	"log"
)

var reder io.Reader

type config struct {
	name string
}

func Init(name string) {
	c := &config{
		name: name,
	}

	if err := c.initConfig(); err != nil {
		log.Fatalf("viper initConfig err:%v",err)
	}

	c.watchConfig()
}

//初始化viper读取配置文件的设定
func (config *config) initConfig() error{

	if config.name != "" { //若指定配置文件名，则解析指定的配置文件
		viper.SetConfigFile(config.name)
	} else { //如果没有指定配置文件，则自动解析指定路径的配置文件
		viper.AddConfigPath("conf")//指定文件夹
		viper.SetConfigName("config")//指定文件名
	}
	viper.SetConfigType("yaml")//设置配置文件类型

	//读取配置文件到reder中
	if err := viper.ReadConfig(reder); err != nil{
		return err
	}

	return nil
}

//监控配置文件的变化并热加载
func (config *config) watchConfig() {
	viper.WatchConfig()//实时监控配置文件的变化
	viper.OnConfigChange(func(in fsnotify.Event) {
		log.Println("config file has changed")
	})
}